using System;
using System.ComponentModel;

namespace InfiniteGeek.Util
{
	/// <summary>Specifies the default value for a property that will be used if no value can be found in the application settings by AutoConfig.</summary>
	[AttributeUsage(AttributeTargets.Property)]
	public sealed class AutoConfigDefaultAttribute : DefaultValueAttribute
	{
		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class, converting the specified value to the specified type, and using an invariant culture as the translation context.</summary>
		/// <param name="type">A <see cref="Type"/> that represents the type to convert the value to.</param>
		/// <param name="value">A <see cref="String"/> that can be converted to the type using the <see cref="TypeConverter"/> for the type and the U.S. English culture.</param>
		public AutoConfigDefaultAttribute(Type type, String value) : base(type, value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a Unicode character.</summary>
		/// <param name="value">A Unicode character that is the default value.</param>
		public AutoConfigDefaultAttribute(Char value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using an 8-bit unsigned integer.</summary>
		/// <param name="value">An 8-bit unsigned integer that is the default value.</param>
		public AutoConfigDefaultAttribute(Byte value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a 16-bit signed integer.</summary>
		/// <param name="value">A 16-bit signed integer that is the default value.</param>
		public AutoConfigDefaultAttribute(Int16 value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a 32-bit signed integer.</summary>
		/// <param name="value">A 32-bit signed integer that is the default value.</param>
		public AutoConfigDefaultAttribute(Int32 value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a 64-bit signed integer.</summary>
		/// <param name="value">A 64-bit signed integer that is the default value.</param>
		public AutoConfigDefaultAttribute(Int64 value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a single-precision floating point number.</summary>
		/// <param name="value">A single-precision floating point number that is the default value.</param>
		public AutoConfigDefaultAttribute(Single value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a double-precision floating point number.</summary>
		/// <param name="value">A double-precision floating point number that is the default value.</param>
		public AutoConfigDefaultAttribute(Double value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a <see cref="Boolean"/> value.</summary>
		/// <param name="value">A <see cref="Boolean"/> that is the default value. </param>
		public AutoConfigDefaultAttribute(Boolean value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class using a <see cref="String"/>.</summary>
		/// <param name="value">A <see cref="String"/> that is the default value.</param>
		public AutoConfigDefaultAttribute(String value) : base(value) { }

		/// <summary>Initializes a new instance of the AutoConfigDefaultAttribute class.</summary>
		/// <param name="value">An <see cref="Object"/> that represents the default value.</param>
		public AutoConfigDefaultAttribute(Object value) : base(value) { } // lame, but required for enums
	}
}